#pragma once

#include "RedBlackTree.h"

namespace rtx
{
	template <class K>
	class set
	{
		struct SetKeyOfT
		{
			const K& operator()(const K& key)
			{
				return key;
			}
		};
	public:
		typedef typename RBTree<K, K, SetKeyOfT>::iterator iterator;
		//必须得加关键字typename。
		//当模板类没有进行实例化时，它就是一张图纸，在编译的时候并不参与编译。
		//因为域作用限定符::的存在，编译器在处理这条语句的时候，可能会将::后的iterator当作静态变量处理，参与编译。
		//所以就需要加关键字typename来告诉编译器这是一个模板类型，暂时不参与编译。

		iterator begin()
		{
			return _t.begin();
		}

		iterator end()
		{
			return _t.end();
		}

		pair<iterator, bool> insert(const K& key)
		{
			return _t.Insert(key);
		}
	protected:
		RBTree <K, K, SetKeyOfT> _t;
	};
}